<?php
class Rewrite{
   var $actual;
   var $path;
   var $rules;
   var $variables;
   var $e404		=	"home/404.php";
   /*$url = 'http://domain.com/danh-muc/duong-dan-chi-tiet.html?arg=value#anchor';
   dump(parse_url($url));
   Array
   (
       [scheme] => http
       [host] => domain.com
       [path] => /danh-muc/duong-dan-chi-tiet.html
       [query] => arg=value
       [fragment] => anchor
   )*/
   function Rewrite(){
      $this->path = parse_url($_SERVER['REQUEST_URI']);	 
      $this->actual = $this->path ==  "/" ?  array("") : explode("/",$this->path['path']);
      $this->execute();
   }
   function error404() {
      header("HTTP/1.1 301 Moved Permanently"); 
      header("Location: ".DOMAIN);
      exit(); 
      header('HTTP/1.1 404 Not Found');
      header('Status: 404 Not Found');
      if ( $this->e404 != '')
         require $this->e404;
      exit();
   }
   function execute(){		
      if (strpos($this->path['path'], 'http:')!==false || strpos($this->path['path'], '?')!==false){
         $this->error404();
      }
      //cho home
      $check_url_path = preg_match("@^/$@" , $this->path['path'], $regs);
      if ($check_url_path == 1){	
         $_GET["file"] = "index";	
         $_GET["alias"] = "";			
         return;
      }
      //cho sitemap.xml
      $check_url_path = preg_match("@^/sitemap.xml$@" , $this->path['path'], $regs);
      if ($check_url_path == 1){	
         $_GET["file"] = "sitemap";		
         return;
      }
      //cho /ajax/
      $check_url_path = preg_match("@^/load-ajax/$@" , $this->path['path'], $regs);
      if ($check_url_path == 1){	
         $_GET["file"] = "loadAjax";	
         $_GET["alias"] = "ajax";				
         return;
      }
      //cho /ajax/
      $check_url_path = preg_match("@^/get-ajax/([^/]*)$@" , $this->path['path'], $regs);
      if ($check_url_path == 1){	
         $_GET["file"] = $regs[1];	
         $_GET["alias"] = "ajax";				
         return;
      }
      //cho /feed/
      $check_url_path = preg_match("@^/feed$@" , $this->path['path'], $regs);
      if ($check_url_path == 1){	
         $_GET["file"] = "rss";			
         return;
      }
      //cho tags : /tags/Việt-Nam
      $check_url_path = preg_match("@^/tags/(.*)/$@" , $this->path['path'], $regs);
      if ($check_url_path == 1){	
         $_GET["file"] = "tags";			
         $_GET["keyword"] =  $regs[1];
         return;
      }
      //cho tags : /tags/Việt-Nam
      $check_url_path = preg_match("@^/search/$@" , $this->path['path'], $regs);
      if ($check_url_path == 1){	
         $_GET["file"] = "search";			
         return;
      }
      //cho link: /dien-thoai/
      $check_url_path = preg_match("@^/dien-thoai/$@" , $this->path['path'], $regs);
      if ($check_url_path == 1){	
         $_GET["file"] = "products";			
         $_GET["alias"] =  str_replace('/','',$regs[0]);
         $_GET["catalias"] = '';
         return;
      }
      //cho link: /dien-thoai-samsung/
      $check_url_path = preg_match("@^/dien-thoai-([^/]*)/$@" , $this->path['path'], $regs);
      if ($check_url_path == 1){	
         $_GET["file"] = "products";			
         $_GET["alias"] =  str_replace('/','',$regs[0]);
         $_GET["catalias"] = str_replace('/','',$regs[1]);
         return;
      }
      //cho link: /dien-thoai/bai-viet-dau-tien.html
      $check_url_path = preg_match("@^/dien-thoai/([^/]*).html$@" , $this->path['path'], $regs);
      if ($check_url_path == 1){			
         $_GET["file"] = "product";	
         $_GET["alias"] = $regs[1];
         return;
      }
      //cho link: /may-tinh-bang/
      $check_url_path = preg_match("@^/may-tinh-bang/$@" , $this->path['path'], $regs);
      if ($check_url_path == 1){	
         $_GET["file"] = "tablets";			
         $_GET["alias"] =  str_replace('/','',$regs[0]);
         $_GET["catalias"] = '';
         return;
      }
      //cho link: /may-tinh-bang-samsung/
      $check_url_path = preg_match("@^/may-tinh-bang-([^/]*)/$@" , $this->path['path'], $regs);
      if ($check_url_path == 1){	
         $_GET["file"] = "tablets";			
         $_GET["alias"] =  str_replace('/','',$regs[0]);
         $_GET["catalias"] = str_replace('/','',$regs[1]);
         return;
      }
      //cho link: /may-tinh-bang/bai-viet-dau-tien.html
      $check_url_path = preg_match("@^/may-tinh-bang/([^/]*).html$@" , $this->path['path'], $regs);
      if ($check_url_path == 1){			
         $_GET["file"] = "tablet";	
         $_GET["alias"] = $regs[1];
         return;
      }
      //cho link: /phu-kien/
      $check_url_path = preg_match("@^/phu-kien/$@" , $this->path['path'], $regs);
      if ($check_url_path == 1){	
         $_GET["file"] = "accessories";			
         $_GET["alias"] =  str_replace('/','',$regs[0]);
         $_GET["catalias"] = '';
         return;
      }
      //cho link: /phu-kien-samsung/
      $check_url_path = preg_match("@^/phu-kien-([^/]*)/$@" , $this->path['path'], $regs);
      if ($check_url_path == 1){	
         $_GET["file"] = "accessories";			
         $_GET["alias"] =  str_replace('/','',$regs[0]);
         $_GET["catalias"] = str_replace('/','',$regs[1]);
         return;
      }
      //cho link: /phu-kien/bai-viet-dau-tien.html
      $check_url_path = preg_match("@^/phu-kien/([^/]*).html$@" , $this->path['path'], $regs);
      if ($check_url_path == 1){			
         $_GET["file"] = "accessory";	
         $_GET["alias"] = $regs[1];
         return;
      }
      //cho link: /dich-vu/
      $check_url_path = preg_match("@^/dich-vu/$@" , $this->path['path'], $regs);
      if ($check_url_path == 1){	
         $_GET["file"] = "services";			
         $_GET["alias"] =  str_replace('/','',$regs[0]);
         $_GET["catalias"] = '';
         return;
      }
      //cho link: /dich-vu-sua-iphone/
      $check_url_path = preg_match("@^/dich-vu-([^/]*)/$@" , $this->path['path'], $regs);
      if ($check_url_path == 1){	
         $_GET["file"] = "services";			
         $_GET["alias"] =  str_replace('/','',$regs[0]);
         $_GET["catalias"] = str_replace('/','',$regs[1]);
         return;
      }
      //cho link: /dich-vu/bai-viet-dau-tien.html
      $check_url_path = preg_match("@^/dich-vu/([^/]*).html$@" , $this->path['path'], $regs);
      if ($check_url_path == 1){			
         $_GET["file"] = "service";	
         $_GET["alias"] = $regs[1];
         return;
      }
      //cho link: /lien-he/
      $check_url_path = preg_match("@^/lien-he/$@" , $this->path['path'], $regs);
      if ($check_url_path == 1){	
         $_GET["file"] = "contact";			
         $_GET["alias"] =  str_replace('/','',$regs[0]);
         return;
      }
      //cho link: /bai-viet/
      $check_url_path = preg_match("@^/bai-viet/$@" , $this->path['path'], $regs);
      if ($check_url_path == 1){	
         $_GET["file"] = "post_cat";			
         $_GET["alias"] =  str_replace('/','',$regs[0]);
         return;
      }
      //cho link: /bai-viet/bai-viet-dau-tien.html
      $check_url_path = preg_match("@^/bai-viet/([^/]*).html$@" , $this->path['path'], $regs);
      if ($check_url_path == 1){			
         $_GET["file"] = "post_detail";	
         $_GET["alias"] = $regs[1];
         return;
      }
      
      //cho link: /tin-tuc/
      $check_url_path = preg_match("@^/tin-tuc/$@" , $this->path['path'], $regs);
      if ($check_url_path == 1){	
         $_GET["file"] = "news_cat";	
         $_GET["page"] = 1;		
         $_GET["alias"] =  str_replace('/','',$regs[0]);
         return;
      }
      //cho link: /tin-tuc/trang-2/
      $check_url_path = preg_match("@^/tin-tuc/trang-([0-9]*)/$@" , $this->path['path'], $regs);
      if ($check_url_path == 1){	
         $_GET["file"] = "news_cat";	
         $_GET["page"] = $regs[1];		
         $_GET["alias"] =  str_replace('/trang-'.$_GET["page"],'',$regs[0]);
         return;
      }
      //cho link: /tin-tuc/tin-tuc-dau-tien.html
      $check_url_path = preg_match("@^/tin-tuc/([^/]*).html$@" , $this->path['path'], $regs);
      if ($check_url_path == 1){			
         $_GET["file"] = "news_detail";	
         $_GET["alias"] = $regs[1];
         return;
      }
      
      //cho link: /khuyen-mai/
      $check_url_path = preg_match("@^/khuyen-mai/$@" , $this->path['path'], $regs);
      if ($check_url_path == 1){	
         $_GET["file"] = "page_fixed";			
         $_GET["alias"] =  str_replace('/','',$regs[0]);
         return;
      }
      
      //cho link: /thanh-toan/
      $check_url_path = preg_match("@^/thanh-toan/$@" , $this->path['path'], $regs);
      if ($check_url_path == 1){	
         $_GET["file"] = "page_fixed";			
         $_GET["alias"] =  str_replace('/','',$regs[0]);
         return;
      }
      
      //cho link: categories
      $check_url_path = preg_match("@^/([^/]*)/$@" , $this->path['path'], $regs);
      if ($check_url_path == 1){	
         $_GET["file"] = "categories";			
         $_GET["alias"] =  str_replace('/','',$regs[1]);
         return;
      }
      //cho link: chi tiet post
      $check_url_path = preg_match("@^/([^/]*).html$@" , $this->path['path'], $regs);
      if ($check_url_path == 1){			
         $_GET["file"] = "post_detail";	
         $_GET["alias"] = $regs[1];
         return;
      }
      //cho link: trang đơn
      $check_url_path = preg_match("@^/page/([^/]*).html$@" , $this->path['path'], $regs);
      if ($check_url_path == 1){			
         $_GET["file"] = "page";	
         $_GET["alias"] = $regs[1];
         return;
      }
      
      if(!isset($_GET["file"]) || $_GET["file"] == '') {
         $this->error404();
      }
   }
}
/*
Trong class, các biểu thức chính qui thay / bởi @ để tránh lỗi
Cơ bản: 
   '/hello/'; // biểu thức chính quy cho một string có chuỗi “hello” ở trong đó.
Ký hiệu “^” và “$”: bắt đầu và kết thúc 1 string:
   '/^hello/';  // biểu thức chính quy cho một string bắt đầu bởi chuỗi “hello”
   '/hello$/'; // biểu thức chính quy cho một string kết thúc bởi chuỗi “hello”
Ký hiệu: “*”, “+”, “?”
   $re = '/^ab*$/' ; // biểu thức chính quy cho một string bắt đầu bởi a, và kết thúc là 0 hoặc nhiều b (ví dụ: a, ab, abb, abbb, …);
   $re = '/^ab+$/' ; // biểu thức chính quy cho một string bắt đầu bởi a, và kết thúc là 1 hoặc nhiều b (ví dụ: ab, abb, abbb, …);
   $re = '/^ab?$/' : // biểu thức chính quy cho một string bắt đầu bởi a, và kết thúc là b hoặc là không (ví dụ: ab hoặc a)
Sử dụng: {}
   $re = '/^ab{2}$/'; // biểu thức chính quy cho một string bắt đầu bởi a, và kết thúc là 2 chũ b (là abb);
   $re = '/^ab{2,}$/'; // biểu thức chính quy cho một string bắt đầu bởi a, và kết thúc là ít nhất 2 chũ b (ví dụ: abb, abbb, abbbb, …);
   $re = '/^ab{2,5}$/'; // biểu thức chính quy cho một string bắt đầu bởi a, và kết thúc là ít nhất 2 chũ b và nhiều nhất là 5 chữ b (ví dụ: abb, abbb, abbbb, abbbbb)
Sử dụng : () và |
   $re = '/^a(bc)*$/'; // biểu thức chính quy cho một string bắt đầu bởi a, và kết thúc là 0 hoặc nhiều 'bc' (ví dụ abc, abcbc, abcbcbcbc, …)
   $re = '/^a(b|c)*$/'; // biểu thức chính quy cho một string bắt đầu bởi a, và kết thúc là 0 hoặc nhiều 'b' hoặc nhiều 'c' hoặc 'b' 'c' lẫn lộn :D (ví dụ abc, abbcccccccccc, abccccbbbcbc, …)
Sử dụng symbol '.': đại diện cho một ký tự đơn bất kỳ
   $re = '/^.{3}$/'; //Biểu thức chính quy cho một chuỗi có đúng 3 ký tự bất kỳ.
Sử dụng: '-':
   [0-9] : Một chữ số
   [a-zA-Z]: một ký tự A->Z, a->z
   [a-d] : ~ (a|b|c|d)
   [^a-zA-Z]: một ký tự không phải là A->Z, a->z
   [^0-9]: một ký tự không phải là số
Sử dụng: '\'
   \d - Chữ số bất kỳ ~ [0-9]
   \D - Ký tự bất kỳ không phải là chữ số (ngược với \d) ~ [^0-9]
   \w - Ký tự từ a-z, A-Z, hoặc 0-9 ~ [a-zA-Z0-9]
   \W - Ngược lại với \w (nghĩa là các ký tự không thuộc các khoảng: a-z, A-Z, hoặc 0-9) ~[^a-zA-Z0-9]
   \s - Khoảng trắng (space) 
   \S - Ký tự bất kỳ không phải là khoảng trắng. 
*/
?>